iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 16
0

先附上參考來源: 設計模式 - 工廠方法及抽象工廠

工廠方法模式

定義:
工廠方法模式定義了一個建立物件的介面,但由子類決定要實例化的類別為何。工廠方法讓類別把 實例化 的動作推遲到了子類

註:這邊是延續前幾天的簡單工廠模式,我對兩者差異的理解是,工廠模式是另外建立一個工廠類,將物件創造和實作給分開來,而工廠方法模式,強調的概念是父類定義介面,由子類決定要實例化的類別,藉此達成降低同類方法互call的依賴性,適合使用時間是,類別開始有了階層,要開始做解耦的時候

解釋:
作者文中的舉例是,假設pizza店生意大好,決定要到紐約州開分店了,該怎麼使用工廠方法模式,設計類別關係,達成開放封閉原則,對修改保持開放,對修改封閉,建議可以大略看完這一段之後,特別留意作者下方畫的結構圖與解釋,簡單說實作工廠方法模式,有四個要素分別是Creator(PizzaStore)、ConcreteCreator(NYPizzaStore)、Product(Pizza)、ConcreteProduct(NYStyleCheesePizza),我的理解是在Creator(PizzaStore)父類中,定義Product(Pizza)要建造的物件介面,接著由ConcreteCreator(NYPizzaStore) 子類實作介面,而由於每個子類要實作出的物件各有不同,因此需要再另外建立ConcreteProduct(NYStyleCheesePizza)

以下有兩個情境,我根據我的理解來解釋
1.我要在LA開新分店,單獨開賣 cheese 口味,根據目前架構,我該如何實作?
我要再建立一個子類 ConcreteCreator(LAPizzaStore)繼承自父類Creator(PizzaStore),再建立ConcreteProduct(LAStyleCheesePizza)提供子類建立物件

2.我要在既有紐約州,另外開發限定珍珠口味pizza,我該怎麼實作?
我要再建立一個ConcreteProduct(NYStyleBubblePizza),並在ConcreteCreator(NYPizzaStore) 子類新增一個判斷是,當type符合 “bubble” 時候,new NYStyleBubblePizza()

優點

  1. 與簡單工廠相同,隱藏建造物件的細節
  2. 加入新產品,不需要修改 creator ,新增判斷式就好,符合開放封閉原則

缺點

  1. ConcreteCreator 跟 ConcreteProduct 會成對的增加

本篇是個人理解紀錄,可能略有出入,完整內容請參考原文


上一篇
D15 CH13 元件內聚性
下一篇
D17 遊記|花蓮太魯閣行
系列文
30天|入門NestJs連載學習筆記26
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言